#pragma once

#include "rewine/ValueSynchronizer.hpp"

#include <string>
#include <memory>

namespace rewine
{

class IExport {
public:
    virtual ~IExport() {};

    virtual unsigned int getIndex() const = 0;
    virtual std::string getName() const = 0;

    virtual void setInvalid() = 0;
    virtual bool isValid() = 0;
    virtual void setValue(void *address) = 0;
    virtual void *getValue() = 0;

    virtual ValueSynchronizer& getValueSynchronizerRef() = 0;
    virtual void bindTo(ValueSynchronizer& source) = 0;
    virtual void unbind() = 0;
};

} // namespace rewine
